# view/main_gui.py
import customtkinter as ctk
from utils.utils import clean_old_mei_tempdirs
from config.platforms import PLATFORMS,TITLE
from data.data_store import DataStore
from view.platform_tabs import build_platform_tab


class MainGUI(ctk.CTk):
    def __init__(self):
        super().__init__()
        # 窗口信息
        self.title(TITLE)
        # 窗口大小
        self.geometry("1000x700")
        # 窗口最小尺寸
        self.minsize(800, 600)
        # 窗口固定尺寸 就是可以做饭窗口的大小，False 表示禁止随意拖动 True 表示可以随意拖动
        self.resizable(False, False)
        # 清理旧版本临时目录
        clean_old_mei_tempdirs()
        # 数据存储
        self.data_store = DataStore()
        # 平台
        self.platforms = PLATFORMS
        # 当前平台
        self.current_main_platform = self.platforms[0]

        #  初始化
        self._init_ui()
        self._preload_all_platforms()
        self._show_platform_content(self.platforms[0])

        self.bind("<Configure>", self._on_window_resize)
        self._last_width = self.winfo_width()
        self.protocol("WM_DELETE_WINDOW", self.on_close)

    def _init_ui(self):
        """
        初始化主界面 UI 布局，包括容器、平台标签页（TabView）等核心组件。
        """

        # 创建主容器框架，用于承载所有 UI 元素，并支持随窗口缩放
        container_frame = ctk.CTkFrame(self)
        container_frame.pack(fill="both", expand=True)

        # 配置容器的网格布局权重，使其子组件（如 TabView）能随窗口大小动态伸缩
        container_frame.grid_rowconfigure(0, weight=1)
        container_frame.grid_columnconfigure(0, weight=1)

        # 创建平台切换用的标签页控件（CTkTabview），设置背景色并绑定切换事件回调
        self.tabview = ctk.CTkTabview(
            container_frame,
            fg_color="#fdfdfd",  # 设置标签页背景色为浅灰白
            command=self.on_main_tab_change  # 当用户切换标签页时触发此回调
        )
        # 将 TabView 放入容器网格中，填满可用空间，并添加内边距
        self.tabview.grid(row=0, column=0, sticky="nsew", padx=10, pady=5)

        # 为每个支持的电商平台动态创建一个空标签页（后续会在预加载阶段填充内容）
        for platform in self.platforms:
            self.tabview.add(platform)  # 添加平台名称作为标签页标题
            # 添加一个高度为 1 的占位 Label，避免空标签页布局异常（CustomTkinter 的常见技巧）
            placeholder = ctk.CTkLabel(self.tabview.tab(platform), text="", height=1)
            placeholder.pack()

        # 默认激活第一个平台的标签页（例如“淘宝”）
        self.tabview.set(self.platforms[0])

        # 初始化标签页标题之间的间距（用于后续动态调整 UI 美观度）
        self.current_spacing = 120
        self._adjust_tab_spacing(self.current_spacing)  # 调用方法调整标签间距

    def _preload_all_platforms(self):
        for platform in self.platforms:
            content = build_platform_tab(self, platform, self, self.data_store)
            self.data_store.platform_content_cache[platform] = content

    def _show_platform_content(self, platform: str):
        tab = self.tabview.tab(platform)
        content_frame = self.data_store.platform_content_cache[platform]
        for widget in tab.winfo_children():
            widget.destroy()
        content_frame.pack(in_=tab, fill="both", expand=True)

    def on_main_tab_change(self):
        current = self.tabview.get()
        if current != self.current_main_platform:
            self._show_platform_content(current)
            self.current_main_platform = current

    def on_close(self):
        clean_old_mei_tempdirs()
        self.destroy()

    def _adjust_tab_spacing(self, spacing: int):
        try:
            segmented_btn = self.tabview._segmented_button
            if segmented_btn:
                for i in range(len(segmented_btn._buttons_dict)):
                    segmented_btn.grid_columnconfigure(i, minsize=spacing)
        except Exception as e:
            print(f"[警告] 调整 tab 间距失败: {e}")

    def _on_window_resize(self, event):
        if event.widget != self:
            return
        new_width = event.width
        if abs(new_width - self._last_width) < 10:
            return
        self._last_width = new_width
        base_spacing = 60
        extra = max(0, (new_width - 800)) * 0.1
        new_spacing = min(int(base_spacing + extra), 200)
        if abs(new_spacing - self.current_spacing) >= 5:
            self.current_spacing = new_spacing
            self._adjust_tab_spacing(new_spacing)